/*********************************************************************************
  *Copyright (c)    2021   xldeng
  *FileName:        114.cpp.c
  *Author:          xldeng
  *Version:         1.0
  *Date:            2021/2/12 17:59
  *Description:     
  *Others:          
  *Function List:   
     1.…………
  *History:  
     1.Date:
       Author:
       Modification:
**********************************************************************************/
//给你二叉树的根结点 root ，请你将它展开为一个单链表：
//
//展开后的单链表应该同样使用 TreeNode ，其中 right 子指针指向链表中下一个结点，而左子指针始终为 null 。
//展开后的单链表应该与二叉树 先序遍历 顺序相同
#include "../header.h"

class Solution {
public:
    void flatten(TreeNode *root) {
        if (root == nullptr)
            return;
        flatten(root->left);
        flatten(root->right);
        TreeNode *right = root->right;
        TreeNode *left = root->left;

        root->left = nullptr;
        root->right = left;

        TreeNode *p = root;
        while (p->right != nullptr)
            p = p->right;
        p->right = right;
    }
};
